
// 购物车 state
export default {
  // 开启命名空间
  namespaced: true,
  
  //cart模块数据
  state: () => ({
    // 购物车包含多个商品
    // 每个商品信息对象如下：
    // { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }
    cart: JSON.parse(uni.getStorageSync('cart') || '[]')
  }),
  
  // 模块数据修改方法
  mutations:{
    // 添加商品到购物车
    addToCart(state, goods){
      // console.log('current state', state)
      console.log('store/cart.js/addToCart 用户选择商品前', goods)
      // 判断商品是否已经在购物车
      const findResult = state.cart.find(item => item.goods_id === goods.goods_id)
      // 不在，则添加
      if(!findResult){
        state.cart.push(goods)
      }else{
        // 在，则更新商品数量
        findResult.goods_count++
      }
      // 通过 commit 方法调用m_cart命名空间下的saveToStorage方法
      this.commit('m_cart/saveToStorage')
    },
    // 更新购物车中商品的选中状态
    updateGoodsState(state, goods){
      console.log('store/cart.js/updateGoodsState 用户修改复选框前', goods)
      // 找出用户选中/不选中的商品
      const findResult = state.cart.find(item => item.goods_id === goods.goods_id)
      // 修改商品的选中/不选中状态
      if(findResult){
        findResult.goods_state = goods.goods_state
        // 通过 commit 方法调用m_cart命名空间下的saveToStorage方法
        this.commit('m_cart/saveToStorage')
      }
    },
    // 修改购物车商品数量
    updateGoodsCount(state, goods){
      console.log('store/cart.js/updateGoodsCount 用户修改数量前', goods)
      const findResult = state.cart.find(item => item.goods_id === goods.goods_id)
      // 修改商品数量
      if(findResult){
        findResult.goods_count = goods.goods_count
        // 保存到本地
        this.commit('m_cart/saveToStorage')
      }
    },
    // 删除购物车商品
    removeGoodsById(state, goods_id){
      console.log('store/cart.js/removeGoodsById 删除购物车商品前', goods_id)
      state.cart = state.cart.filter(item => item.goods_id !== goods_id)
      
      // 保存到本地
      this.commit('m_cart/saveToStorage')
    },
    // 更新所有商品的选中状态
    updateAllGoodsState(state, newState){
      state.cart.forEach(item => item.goods_state = newState)
      
      // 保存到本地
      this.commit('m_cart/saveToStorage')
    },
    
    // 保存购物车数据到本地
    saveToStorage(state){
      uni.setStorageSync('cart', JSON.stringify(state.cart))
    }
    
  },
  
  // 模块getters属性
  getters:{
    // 获取购车中商品数量
    total (state) {
      return state.cart.reduce( (acc, curr)=> {
        return acc+curr.goods_count
      }, 0)
      // return state.cart.reduce( (acc, curr)=> acc+curr.goods_count, 0 )
    },
    // 勾选商品的数量
    // 使用filter方法过滤出选中的商品
    // 计算选中商品的总数量
    checkedCount(state) {
      return state.cart.filter(item => item.goods_state).reduce( (acc, curr) => acc += curr.goods_count, 0)
    },
    // 已勾选商品的总价格
    checkedGoodsAmount(state){
      // 过滤出勾选商品
      // 累加 商品数量*商品价格
      // 保留两位小数
      return state.cart.filter(item => item.goods_state)
                       .reduce((acc, curr) => acc += curr.goods_count*curr.goods_price, 0)
                       .toFixed(2)
      
    },
    
    
  }
  
}
